package com.site.sys;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

 

public class SysConfig {

	// 采集网站的文章字数的最低限制
	public static final String HUNT_CONTENT_LIMIT = "HUNT_CONTENT_LIMIT";

  

    /*日志记录器*/
    protected static Logger log = LoggerFactory.getLogger(SysConfig.class);

    private static SysConfig instance = new SysConfig();

    // 存放系统参数
    private Map<String, String> sysConfig = new HashMap<String, String>();

     

    // 是否正在刷新系统表
    private boolean isRefresh = false;

    // 系统配置刷新线程
    private RefreshThread refreshThread = null;
 
    
  
    
    /**
     * 根据参数名称获取系统参数值
     * 
     * @param code
     * @return
     */
    public static String getValue(String code) {
        return instance.getValueByCode(code);
    }

    /**
     * 根据参数名称获取系统参数值
     * 
     * @param code
     * @return
     */
    public static String getValue(String code, String defaultValue) {
        String value = instance.getValueByCode(code);
        if (StringUtils.isEmpty(value)) {
            return defaultValue;
        }
        return value;
    }

    /**
     * 根据参数名称获取系统参数值
     * 
     * @param code
     * @return
     */
    public static int getIntValue(String code, int defaultValue) {
        String value = instance.getValueByCode(code);
        if (!StringUtils.isEmpty(value)) {
            try {
                return Integer.parseInt(value);
            } catch (Exception e) {
                log.error(
                        "parse [" + code + "] value[" + value + "] error:", e);
            }
        }

        return defaultValue;
    }
    
    /**
     * 根据参数名称获取系统参数值
     * 
     * @param code
     * @return
     */
    public static double getDoubleValue(String code, double defaultValue) {
        String value = instance.getValueByCode(code);
        if (!StringUtils.isEmpty(value)) {
            try {
                return Double.parseDouble(value);
            } catch (Exception e) {
                log.error(
                        "parse [" + code + "] value[" + value + "] error:", e);
            }
        }

        return defaultValue;
    }

    /**
     * 刷新系统参数
     */
    public static void refresh() {
        instance.refreshSysConfig();
    }

    /**
     * 根据参数名称获取系统参数值
     * 
     * @param code
     * @return
     */
    public String getValueByCode(String code) {
        int i = 0;
        while (isRefresh && i++ < 5) {
            try {
                Thread.sleep(1000);
            } catch (Exception e) {
            }
        }
        return sysConfig.get(code);
    }

    private SysConfig() {
        init();

        refreshThread = new RefreshThread();
        refreshThread.start();
    }

    /**
     * 初始化
     */
    private void init() {
//        try {
//            List sysConfigList = jdbcDao.queryForList(QUERY_SQL);
//
//            // 正在刷新系统表
//            isRefresh = true;
//            sysConfig.clear();
//            if (sysConfigList == null || sysConfigList.isEmpty()) {
//                // 没有系统参数
//                log.debug("sysConfig is empty.");
//                return;
//            }
//
//            for (int i = 0; i < sysConfigList.size(); i++) {
//                Map config = (Map) sysConfigList.get(i);
//                sysConfig.put((String) config.get("PARAM_CODE"),
//                        (String) config.get("PARAM_VALUE"));
//            }
//            
//            
//
//        } catch (Exception e) {
//            log.error("refresh sysconfig exception:", e);
//        } finally {
//            // 系统表刷新完毕
//            isRefresh = false;
//        }
    }

    /**
     * 刷新用户邮件配置信息
     */
    public void refreshSysConfig() {
        init();
    }

    /**
     * 刷新系统配置
     * 
     * @author Administrator
     * 
     */
    static class RefreshThread extends Thread {

        public void run() {
            while (true) {
                try {
                    Thread.sleep(5 * 60 * 1000);
                } catch (Exception e) {
                }

                // 刷新系统配置
                instance.refreshSysConfig();
            }
        }
    }


}
